// 30.包含min函数的栈
// 定义栈的数据结构， 请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中，
// 调用 min、 push 及 pop 的时间复杂度都是 O(1)。

var Minstack = function () {
  //主栈
  this.stack = []
  //辅助栈，存储每期的最小值
  this.min = []
}

Minstack.prototype.push = function (x) {
  this.stack.push(x)
  //如果min栈已有，则比较，得出每次的最小值
  if (this.min.length != 0) {
    let tmp = this.min[this.min.length - 1]
    if (tmp < x) {
      this.min.push(tmp)
    } else {
      this.min.push(x)
    }

  } else {
    this.min.push(x)
  }
}

Minstack.prototype.pop = function () {
  this.stack.pop()
  this.min.pop()
}

Minstack.prototype.min = function () {
  return this.min[this.min.length - 1]
}

Minstack.prototype.top = function () {
  return this.stack[this.stack.length - 1]
}